package com.lcf.feign.interceptor;

import cn.dev33.satoken.same.SaSameUtil;
import cn.dev33.satoken.stp.StpUtil;
import com.lcf.common.utils.ServletUtils;
import com.lcf.common.utils.UserUtils;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;

import static com.lcf.base.constant.SysConstant.*;

/**
 * 描述：feign 添加请求头
 *
 * @author lcf
 * @since 2025/3/4 22:40
 */
@Component
public class FeignInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate requestTemplate) {
        // 为 Feign 的 RCP调用 添加请求头Same-Token
        requestTemplate.header(SaSameUtil.SAME_TOKEN, SaSameUtil.getToken());
        // 为 Feign 的 RCP调用 添加请求头租户id
        requestTemplate.header(SESSION_TENANT_ID_KEY, String.valueOf(UserUtils.getTenantId()));
        // 为 Feign 的 RCP调用 添加请求头用户id
        requestTemplate.header(HEADER_USER_ID_KEY, String.valueOf(UserUtils.getUserId()));
        // 如果希望被调用方有会话状态，此处就还需要将 satoken 添加到请求头中
        requestTemplate.header(StpUtil.getTokenName(), ServletUtils.getRequest() != null && StpUtil.isLogin() ? StpUtil.getTokenValue() : null);
        // 添加自定义请求头用来判断controller请求是否是feign调用，在全局请求返回拦截中判断是否处理返回格式
        requestTemplate.header(FEIGN_HEADER, FEIGN_HEADER_VALUE);
    }
}
